iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Modern Web

前端工程師30天 WebRTC + Firebase 視訊通話原理到實作系列 第 12

[Day12] RTCPeerConnection - RTCIceServer STUN/TURN 穿越 NAT 防火牆

  • 分享至 

  • xImage
  •  

上篇說到 NAT 將內部 IP 與外部 IP 互相轉換以達到連線,但不同的 NAT 也會面臨一些連線問題,這種時候穿越防火牆/NAT技術 STUN 和 TURN 扮演著重要的角色,可以來解決連線時受到的限制。

STUN (Session Traversal Utilities for NAT)

是最著名和最常被使用穿越 NAT 防火牆的解決辦法,它的主要作用是幫助瀏覽器和其他設備發現自己的公共 IP 地址和 port。

當一個裝置(User Agent)想要與其他裝置進行實時通信時,它會發送一個訊息給 STUN 伺服器。這個 STUN 伺服器的工作是從訊息中找出這個裝置的外部位置,然後把這個資訊送回給該裝置。另外,STUN 伺服器還能夠通過一些特殊的測試封包來獲得 NAT 的種類,並告訴裝置如何穿越 NAT以確定裝置的可用 IP 地址。

在 WebRTC 實作時可以用 google 所提供的 stun server

urls: ["stun:stun1.l.google.com:19302", "stun:stun2.l.google.com:19302"]

TURN(Traversal Using Relays around NAT)

它的功能比 STUN 更強大。當 STUN 無法克服 NAT 的限制時,TURN提供了一個中繼服務,允許設備之間進行數據通信,即使它們處於不同的 NAT 環境中。

當一個裝置(User Agent)想要與其他裝置進行實時通信時,它向TURN伺服器發送一個"TURN allocate"請求,伺服器會記住請求的 IP 位址和 Port ,然後回覆一個公共 IP 位址和 Port,客戶端可以將資料發送到伺服器分配的公共Port上,充當中繼者。

雖然這種方法可以克服防火牆,但它卻變成 Client-Server模式,導致伺服器承擔所有流量。

WebRTC 中的 STUN 和 TURN

  • WebRTC 使用 STUN 和 TURN 協議來克服 NAT 和防火牆的障礙,確保兩個瀏覽器之間的實時通信順利進行。
  • 當瀏覽器無法直接建立對等連接時,它們將使用 STUN 來獲取公共 IP 地址,並嘗試直接通信。如果 STUN 無法成功且有設定 TURN server的情況下,則會使用 TURN 服務器作為中繼,將數據傳遞給對方。

重要概念

  • STUN(Session Traversal Utilities for NAT)用於獲取公共IP地址和端口。
  • TURN(Traversal Using Relays around NAT)提供中繼服務,允許通信,即使在複雜的NAT環境中也能運作。
  • WebRTC使用STUN和TURN協議來確保實時通信的成功。

以上就是 STUN/TURN 用來解決 NAT 穿越的困難,下篇會說到 WebRTC 所使用的 ICE(Interactive Connectivity Establishment)它不僅包括 STUN 和 TURN,還提供了一個綜合的方法,以確定最佳的通訊路徑協議來處理連接建立中的 NAT 穿越和防火牆問題。


參考資料
真的寫得很好 👉 cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm


上一篇
[Day11] RTCPeerConnection - RTCIceServer NAT 網絡地址轉換
下一篇
[Day13] RTCPeerConnection - ICE RTCIceCandidate ICE 協議
系列文
前端工程師30天 WebRTC + Firebase 視訊通話原理到實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言